package com.locktest.caslock;

/**
 * cas
 *
 * @author hehaoyang
 * @createTime 2019-04-14 18:15
 */
public class CasLock {

    private boolean locked = false;

    /**
     * 如果用在多线程的程序会出现很多错误
     * @return
     */
    public boolean lock() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }

    /**
     * 用synchronized关键字重构成一个原子块
     * @return
     */
    public synchronized boolean lockSyn() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }

    /**
     * CPU内部已经执行原子的CAS操作
     * 如果值被替换了，compareAndSet()返回true，否则，返回false。
     * @return
     */
    public synchronized boolean lockCas() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }


}
